package com.weiss.jpro.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;
//Serializable 是一个标记接口（marker interface），它没有定义任何方法。当一个类实现了 Serializable 接口时，表示该类的对象可以被序列化（serialized）。
//序列化 是将对象的状态信息转换为字节序列的过程，这些字节序列可以被写入文件、发送到网络等。反序列化 是将字节序列恢复为对象的过程。

// @EqualsAndHashCode 是 Lombok 提供的一个注解，用于自动生成 equals 和 hashCode 方法。
// 这两个方法在 Java 中用于比较对象是否相等以及计算对象的哈希值，通常在使用集合（如 HashMap、HashSet）时非常重要。
// callSuper = false：表示在生成的 equals 和 hashCode 方法中，不调用父类的 equals 和 hashCode 方法。
// 默认值：默认情况下，callSuper 的值为 false，即不调用父类的 equals 和 hashCode 方法。
// @Accessors 是 Lombok 提供的一个注解，用于自动生成 getter 和 setter 方法，并可以配置这些方法的行为。
// 参数 chain
// chain = true：表示生成的 setter 方法会返回当前对象的引用，从而支持链式调用。
// 默认值：默认情况下，chain 的值为 false，即 setter 方法返回 void。
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_user")
public class User implements Serializable {
    //     serialVersionUID 是一个静态常量，用于标识类的版本。它在序列化和反序列化过程中起着重要作用。
    //    当对象被序列化时，序列化机制会将 serialVersionUID 写入序列化文件中。
    //    当反序列化时，序列化机制会检查序列化文件中的 serialVersionUID 是否与当前类的 serialVersionUID 匹配。如果不匹配，会抛出 InvalidClassException 异常。
    //
    //作用：
    //
    //    版本控制：如果类的结构发生变化（如添加、删除字段等），可以通过修改 serialVersionUID 的值来避免反序列化时出现版本不匹配的问题。
    //    确保兼容性：显式定义 serialVersionUID 可以确保类的序列化版本在不同版本的 Java 环境中保持一致。
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 密码，加密存储
     */
    private String password;

    /**
     * 昵称，默认是随机字符
     */
    private String nickName;

    /**
     * 用户头像
     */
    private String icon = "";

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

}
